<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ES Module - 模块的特性</title>
</head>
<body>
  <!-- 通过给他script 添加 type="module" 的属性，就可以以ES
    Module 的标准执行其中的JS代码
  -->
  <script type="module">
    console.log('this is module');
  </script>

  <!-- 1. ESM 自动采用严格模式，忽略 'use strict' -->
  <script type="module">
    console.log(this); // 打印undefined
  </script>

  <!-- 2. 每个 ES Module 都是运行在单独的私有作用域中 -->
  <script type="module">
    var foo = 100;
    console.log(foo); // 100
  </script>
  <script type="module">
    console.log(foo); // 报错
  </script>
  
  <!-- 3. ESModule 是通过 CORS 的方式请求外部的 JS模块的 -->
  <!-- xxx.js 必须支持CORS，不然无法引入 -->
  <!-- <script type="module" src="xxx.js"></script> -->

  <!-- 4. ESM 的 script 标签会延迟执行脚本, 功能相当于添加defer属性 -->
  <!-- 延迟执行会等到DOM渲染完成后才会执行 -->
  <script type="module" src="demo.js"></script>
  <p>123</p>
</body>
</html>